home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / sbin / MAKEDEV < prev    next >
Encoding:
Text File  |  2007-01-14  |  51.1 KB  |  2,173 lines

  1. #! /bin/sh -
  2. # $Id$
  3.  
  4. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  5. # Customisation:
  6. #   The devices fall into various classes.  This section contains the mapping
  7. # from a class name into a group name and permission.
  8. #   You will almost certainly need to edit the group name to match your
  9. # system, and you may change the permissions to suit your preference.  These
  10. # lines _must_ be of the format "user group perm".
  11.  
  12.  public="  root root   0666"
  13. private="  root root   0600"
  14.  system="  root root   0660"
  15.    kmem="  root kmem   0640"
  16.     tty="  root tty    0666"
  17.    cons="  root tty    0600"
  18. dialout="  root dialout 0660"
  19.     dip="  root dip    0660"
  20.   mouse="  root root   0660"
  21. printer="  root lp     0660"
  22.  floppy="  root floppy 0660"
  23.    disk="  root disk   0660"
  24.    scsi="  root root   0600"
  25.   cdrom="  root cdrom  0660"
  26.    tape="  root tape   0660"
  27.   audio="  root audio  0660"
  28.   video="  root video  0660"
  29.   ibcs2="  root root   0666"
  30. scanner="  root root   0666"
  31.    coda="  root root   0600"
  32.   ipsec="  root root   0200"
  33. readable="  root root   0444"
  34.  
  35. MAXVT=63
  36.  
  37. # defaults for $major_*
  38. major_ide0=3
  39. major_ide1=22
  40. major_sd=8
  41. major_lp=6
  42.  
  43. # Remark: OSS/Linux becomes major_OSSLinux
  44.  
  45. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  46.  
  47. # try to do the right things if udev is running
  48. if [ "$WRITE_ON_UDEV" ]; then
  49.   :
  50. elif [ -d /dev/.static/dev/ ] && [ "`pwd`" = /dev ] && [ -e /proc/mounts ] \
  51.     && grep -qE '^[^ ]+ /dev/\.static/dev' /proc/mounts; then
  52.   echo "udev active, devices will be created in /dev/.static/dev/"
  53.   cd /dev/.static/dev/
  54. elif [ -d /.dev/ ] && [ "`pwd`" = /dev ] && [ -e /proc/mounts ] \
  55.     && grep -qE '^[^ ]+ /\.dev' /proc/mounts; then
  56.   echo "udev active, devices will be created in /.dev/"
  57.   cd /.dev/
  58. elif [ -d .udevdb/ -o -d .udev/ ] && [ "`pwd`" = /dev ]; then
  59.   echo ".udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation."
  60.   # use exit 0, not 1, so postinst scripts don't fail on this
  61.   exit 0
  62. fi
  63.  
  64. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  65.  
  66. # don't stomp on devfs users
  67. if  [ -c .devfsd ]
  68. then
  69.     echo ".devfsd presence implies active DevFS.  Aborting MAKEDEV invocation."
  70.     # use exit 0, not 1, so postinst scripts don't fail on this
  71.     exit 0
  72. fi
  73.  
  74. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  75.  
  76. # don't stomp on non-Linux users
  77. if [ "$(uname -s)" != "Linux" ]
  78. then
  79.     echo "Results undefined on non-Linux systems, aborting MAKEDEV invocation."
  80.     # use exit 0, not 1, so postinst scripts don't fail on this
  81.     exit 0
  82. fi
  83.  
  84. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  85.  
  86. procfs=/proc
  87.  
  88. opt_v=
  89. opt_d=
  90. opt_n=
  91.  
  92. while [ $# -ge 1 ]
  93. do
  94.     case $1 in
  95.         --)    shift; break ;;
  96.         -v)    shift; opt_v=1 ;;
  97.         -d)    shift; opt_d=1 ;;
  98.         -n)    shift; opt_n=1; opt_v=1 ;;
  99.         -V)    shift; opt_V=1 ;;
  100.         -*)    echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
  101.         *)    break ;;
  102.     esac
  103. done
  104.  
  105. if [ "$opt_V" ]
  106. then
  107.     echo "This is Debian MAKEDEV.  For version info, try 'dpkg --list makedev'"
  108.     echo "See /usr/share/doc/makedev/ for more information on Debian MAKEDEV."
  109.     exit 0
  110. fi
  111.  
  112. opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
  113.  
  114. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  115.  
  116. devicename () {    # translate device names to something safe
  117.     # A-Z is not full alphabet in all locales (e.g. in et_EE)
  118.     echo "$*" | LC_ALL=C sed -e 's/[^A-Za-z0-9_]/_/g' 
  119. }
  120.  
  121. makedev () {    # usage: makedev name [bcu] major minor owner group mode
  122.     if [ "$opt_v" ]
  123.     then    if [ "$opt_d" ]
  124.         then    echo "delete $1"
  125.         else    echo "create $1    $2 $3 $4 $5:$6 $7" 
  126.         fi
  127.     fi
  128.     # missing parameters are a bug - bail - should we do an exit 1 here?
  129.     case :$1:$2:$3:$4:$5:$6:$7: in
  130.         *::*) echo "Warning: MAKEDEV $@ is missing parameter(s)." >&2;;
  131.     esac
  132.     if [ ! "$opt_n" ]
  133.     then    
  134.         if [ "$opt_d" ]
  135.         then
  136.             rm -f $1
  137.         else
  138.             rm -f $1-
  139.             if mknod $1- $2 $3 $4 &&
  140.                chown $5:$6 $1- &&
  141.                chmod $7 $1- &&
  142.                mv $1- $1
  143.             then
  144.                 :    # it worked
  145.             else
  146.                     # Didn't work, clean up any mess...
  147.                 echo "makedev $@: failed"
  148.                 rm -f $1-
  149.             fi
  150.         fi
  151.     fi
  152. }
  153. symlink () {    # usage: symlink name target
  154.     if [ "$opt_v" ]
  155.     then    if [ "$opt_d" ]
  156.         then    echo "delete $1"
  157.         else    echo "create $1    -> $2"
  158.         fi
  159.     fi
  160.     [ ! "$opt_n" ] && rm -f $1 &&
  161.     [ ! "$opt_d" ] && ln -s $2 $1
  162. }
  163.  
  164. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  165.  
  166. # Debian allows us to assume /bin/sh is a POSIX compliant shell, so go for it!
  167.  
  168. math () {
  169.     eval echo "\$(($*))"
  170. }
  171. index () {    # index string c
  172.     eval "I=\${1%$2*}"
  173.     eval echo "\${#I}"
  174. }
  175. suffix () {
  176.     eval echo "\${1#$2}"
  177. }
  178. strip () {
  179.     eval echo "\${1% $2 *} \${1#* $2 }"
  180. }
  181. first () {
  182.     echo "${1%%?}"
  183. }
  184. second () {
  185.     echo "${1##?}"
  186. }
  187. substr () {
  188.     echo $1 | dd bs=1 count=1 skip=$(( $2 - 1 )) 2> /dev/null
  189. }
  190.  
  191. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  192.  
  193. devices=
  194. if [ ! -f $procfs/devices ]
  195. then
  196.     echo "$0: warning: can't read $procfs/devices" >&2
  197. else
  198.     exec 3<$procfs/devices
  199.     while read major device extra <&3
  200.     do
  201.         device=`echo $device | sed 's#/.*##'`
  202.         case "$major" in
  203.             Character|Block|'')
  204.                 ;;
  205.             *)
  206.                 safedevname=`devicename $device`
  207.                 eval "major_$safedevname=$major"
  208.                 devices="$devices $device"
  209.                 ;;
  210.         esac
  211.     done
  212.     exec 3<&-
  213. fi
  214.  
  215. Major () {
  216.     device=$2
  217.     devname=`devicename $1`
  218.     if [ "$opt_d" ]
  219.     then
  220.         echo -1    # don't care
  221.     else
  222.         eval echo \${major_$devname:-\${device:?\"unknown major number for $1\"}}
  223.     fi
  224. }
  225.  
  226. cvt () {
  227.     while [ $# -ne 0 ]
  228.     do
  229.         case "$1" in
  230.             mem|tty|ttyp|cua|cub|cui)    ;;
  231.             hd)    (for d in a b c d e f g h i j k l m n o p ; do
  232.                     echo -n hd$d " "
  233.                  done) ; echo
  234.                 ;;
  235.             ide0)    echo hda hdb ;;
  236.             ide1)    echo hdc hdd ;;
  237.             ide2)    echo hde hdf ;;
  238.             ide3)    echo hdg hdh ;;
  239.             ide4)    echo hdi hdj ;;
  240.             ide5)    echo hdk hdl ;;
  241.             ide6)    echo hdm hdn ;;
  242.             ide7)    echo hdo hdp ;;
  243.             ide8)    echo hdq hdr ;;
  244.             ide9)    echo hds hdt ;;
  245.             sd)    (for d in a b c d e f g h i j k l m n o p ; do
  246.                     echo -n sd$d " "
  247.                  done) ; echo
  248.                 ;;
  249.             dasd)   (for d in a b c d e f g h i j k l m \
  250.                     n o p q r s t u v w x y z ; do
  251.                     echo -n dasd$d " "
  252.                 done) ; echo
  253.                 ;;
  254.             raw)    echo raw ;;
  255.             sg)    echo sg ;;
  256.             sr)    echo scd ;;
  257.             st)    echo st0 ;;
  258.             xd)    echo xda xdb ;;
  259.             ad)    echo ada adb ;;
  260.             lp)    echo lp ;;
  261.             mt)    echo ftape ;;
  262.             qft)    echo ftape ;;
  263.             loop)    echo loop ;;
  264.             md)    echo md ;;
  265.             ibcs2)    echo ibcs2 ;;
  266.             tpqic02)    echo qic ;;
  267.             sound)        echo audio ;;
  268.             logiscan)    echo logiscan ;;
  269.             ac4096)        echo ac4096 ;;
  270.             hw)    echo helloworld ;;
  271.             sbpcd | sbpcd[123])    echo $1 ;;
  272.             joystick)    echo js ;;
  273.             input)    echo input ;;
  274.             apm_bios)    echo apm ;;
  275.             dcf)        echo dcf ;;
  276.             aztcd)        echo aztcd ;;
  277.             cm206cd)    echo cm206cd ;;
  278.             gscd)        echo gscd ;;
  279.             pcmcia)    ;; # taken care of by its own driver
  280.             ttyC)    echo cyclades ;;
  281.             isdn)    echo isdnmodem isdnbri dcbri ;;
  282.             vcs)    ;;
  283.             pty)    echo pty ;;
  284.             misc)    echo misc ;;
  285.             3dfx)    echo 3dfx ;;
  286.             agpgart)    echo agpgart ;;
  287.             microcode)    echo microcode ;;
  288.             ipmi|ipmikcs)    echo ipmi ;;
  289.             fb)    echo fb ;;
  290.             nb|drbd)    echo nb0 nb1 nb2 nb3 nb4 nb5 nb6 nb7;;
  291.             netlink)    echo netlink ;;
  292.             tap)    echo netlink ;;
  293.             hamradio)    echo hamradio ;;
  294.             snd)    ;;
  295.             ptm)    ;;
  296.             pts)    ;;
  297.             ttyB)    (for l in 0 1 2 3 4 5 6 7 ; do
  298.                     echo -n ttyB$l " "
  299.                  done) ; echo
  300.                 ;;
  301.             ttyS)    echo ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ;;
  302.             ttyI)    echo ttyI0 ttyI1 ttyI2 ttyI3 ;;
  303.             ircomm|irlpt)    irda ;;
  304.             ppp)    echo ppp ;;
  305.             usb)    echo usb ;;
  306.             dpt_i2o)    echo dpti ;;
  307.             bluetooth)    echo bluetooth ;;
  308.             lvm)    ;; # taken care of by LVM userspace tools
  309.             ramdisk)    echo ram ;;
  310.             null)    echo std ;;
  311.             zero)    echo std ;;
  312. #            *)    echo "$0: don't know what \"$1\" is" >&2 ;;
  313.             *)    echo $1
  314.         esac
  315.         shift
  316.     done
  317. }
  318.  
  319. for arg in `cvt $*`
  320. do
  321.     # this is to make the case patterns work as expected in all locales
  322.     LC_ALL=C
  323.     case $arg in
  324.     generic)
  325.         # pick the right generic-<arch> using dpkg's knowledge
  326.         case `dpkg --print-installation-architecture` in
  327.             alpha)
  328.                 $0 $opts generic-alpha
  329.                 ;;
  330.             arm|armeb)
  331.                 $0 $opts generic-arm
  332.                 ;;
  333.             hppa)
  334.                 $0 $opts generic-hppa
  335.                 ;;
  336.             i386)
  337.                 $0 $opts generic-i386
  338.                 ;;
  339.             amd64)
  340.                 $0 $opts generic-i386
  341.                 ;;
  342.             ia64)
  343.                 $0 $opts generic-ia64
  344.                 ;;
  345.             m68k)
  346.                 $0 $opts generic-m68k
  347.                 ;;
  348.             mips)
  349.                 $0 $opts generic-mips
  350.                 ;;
  351.             mipsel)
  352.                 $0 $opts generic-mipsel
  353.                 ;;
  354.             powerpc)
  355.                 $0 $opts generic-powerpc
  356.                 ;;
  357.             ppc64)
  358.                 $0 $opts generic-powerpc
  359.                 ;;
  360.             s390)
  361.                 $0 $opts generic-s390
  362.                 ;;
  363.             sh*)    
  364.                 $0 $opts generic-sh
  365.                 ;;
  366.             sparc)
  367.                 $0 $opts generic-sparc
  368.                 ;;
  369.             *)
  370.                 echo "$0: no support for generic on this arch" >&2
  371.                 exit 1
  372.                 ;;
  373.         esac
  374.         ;;
  375.     generic-alpha)
  376.         $0 $opts std
  377.         $0 $opts fd
  378.         $0 $opts fd0 fd1
  379.         $0 $opts hd sd
  380.         $0 $opts xda xdb
  381.         $0 $opts scd0 scd1
  382.         $0 $opts st0 st1
  383.         $0 $opts sg
  384.         $0 $opts pty
  385.         $0 $opts console
  386.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  387.         $0 $opts busmice
  388.         $0 $opts lp
  389.         $0 $opts par
  390.         $0 $opts audio
  391.         $0 $opts fb
  392.         $0 $opts dac960
  393.         ;;
  394.     generic-arm)
  395.         $0 $opts std
  396.         $0 $opts fd
  397.         $0 $opts fd0 fd1
  398.         $0 $opts hd sd
  399.         $0 $opts xda xdb
  400.         $0 $opts scd0 scd1
  401.         $0 $opts st0 st1
  402.         $0 $opts sg
  403.         $0 $opts pty
  404.         $0 $opts console
  405.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  406.         $0 $opts busmice
  407.         makedev sunmouse  c 10 6 $mouse
  408.         $0 $opts lp
  409.         $0 $opts par
  410.         $0 $opts audio
  411.         $0 $opts fb
  412.         ;;
  413.     generic-hppa)
  414.         $0 $opts std
  415.         $0 $opts fd
  416.         $0 $opts fd0 fd1
  417.         $0 $opts hd sd
  418.         $0 $opts scd0 scd1
  419.         $0 $opts st0 st1
  420.         $0 $opts sg
  421.         $0 $opts pty
  422.         $0 $opts console
  423.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  424.         $0 $opts ttyB0 ttyB1 ttyB2 ttyB3 ttyB4 ttyB5 ttyB6 ttyB7
  425.         $0 $opts busmice
  426.         $0 $opts lp
  427.         $0 $opts par
  428.         $0 $opts audio
  429.         $0 $opts fb
  430.         $0 $opts rtc
  431.         ;;
  432.     generic-i386)
  433.         $0 $opts std
  434.         $0 $opts fd
  435.         $0 $opts fd0 fd1
  436.         $0 $opts hd sd
  437.         $0 $opts xda xdb
  438.         $0 $opts scd0 scd1
  439.         $0 $opts st0 st1
  440.         $0 $opts sg
  441.         $0 $opts pty
  442.         $0 $opts console
  443.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  444.         $0 $opts busmice
  445.         $0 $opts input
  446.         $0 $opts lp
  447.         $0 $opts par
  448.         $0 $opts audio
  449.         $0 $opts fb
  450.         $0 $opts isdn-io eda edb sonycd mcd mcdx cdu535
  451.         $0 $opts optcd sjcd cm206cd gscd 
  452.         $0 $opts lmscd sbpcd aztcd bpcd dac960 dpti ida ataraid cciss
  453.         $0 $opts i2o.hda i2o.hdb i2o.hdc i2o.hdd
  454.         ;;
  455.     generic-ia64)
  456.         $0 $opts std
  457.         $0 $opts fd
  458.         $0 $opts fd0 fd1
  459.         $0 $opts hd sd
  460.         $0 $opts scd0 scd1
  461.         $0 $opts st0 st1
  462.         $0 $opts sg
  463.         $0 $opts pty
  464.         $0 $opts console
  465.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
  466.         $0 $opts busmice
  467.         $0 $opts input
  468.         $0 $opts lp
  469.         $0 $opts par
  470.         $0 $opts audio
  471.         $0 $opts fb
  472.         $0 $opts efirtc
  473.         ;;
  474.     generic-m68k)
  475.         $0 $opts std
  476.         $0 $opts fd
  477.         $0 $opts fd0 fd1
  478.         $0 $opts hd sd
  479.         $0 $opts scd0 scd1
  480.         $0 $opts sg
  481.         $0 $opts ada adb adc add ade adf
  482.         $0 $opts pty
  483.         $0 $opts console
  484.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
  485.         $0 $opts m68k-mice
  486.         $0 $opts lp
  487.         $0 $opts par
  488.         $0 $opts nvram
  489.         $0 $opts audio
  490.         $0 $opts fb
  491.         ;;
  492.     generic-mips)
  493.         $0 $opts std
  494.         $0 $opts fd
  495.         $0 $opts fd0 fd1
  496.         $0 $opts hd sd
  497.         $0 $opts scd0 scd1
  498.         $0 $opts st0 st1
  499.         $0 $opts sg
  500.         $0 $opts pty
  501.         $0 $opts console
  502.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  503.         $0 $opts lp
  504.         $0 $opts par
  505.         $0 $opts audio
  506.         $0 $opts fb
  507.         $0 $opts busmice
  508.         ;;
  509.     generic-mipsel)
  510.         $0 $opts std
  511.         $0 $opts fd
  512.         $0 $opts fd0 fd1
  513.         $0 $opts hd sd
  514.         $0 $opts scd0 scd1
  515.         $0 $opts st0 st1
  516.         $0 $opts sg
  517.         $0 $opts pty
  518.         $0 $opts console
  519.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  520.         $0 $opts lp
  521.         $0 $opts par
  522.         $0 $opts audio
  523.         $0 $opts fb
  524.         $0 $opts rtc
  525.         ;;
  526.     generic-powerpc)
  527.         $0 $opts std
  528.         $0 $opts fd
  529.         $0 $opts fd0 fd1
  530.         $0 $opts hd sd
  531.         $0 $opts scd0 scd1
  532.         $0 $opts st0 st1
  533.         $0 $opts sg
  534.         $0 $opts pty
  535.         $0 $opts console
  536.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  537.         $0 $opts busmice
  538.         $0 $opts m68k-mice
  539.         $0 $opts input
  540.         $0 $opts lp
  541.         $0 $opts par
  542.         $0 $opts nvram
  543.         $0 $opts audio
  544.         $0 $opts adb
  545.         $0 $opts fb
  546.         $0 $opts rtc
  547.         $0 $opts isdn-io
  548.         ;;
  549.     generic-s390)
  550.         $0 $opts std
  551.         $0 $opts fd
  552.         $0 $opts dasda dasdb dasdc dasdd dasde dasdf dasdg dasdh \
  553.             dasdi dasdj dasdk dasdl dasdm dasdn dasdo dasdp \
  554.             dasdq dasdr dasds dasdt dasdu dasdv dasdw dasdx \
  555.             dasdy dasdz
  556.         $0 $opts pty
  557.         $0 $opts consoleonly
  558.         $0 $opts rtc
  559.         ;;
  560.     generic-sh)
  561.         $0 $opts std
  562.         $0 $opts fd
  563.         $0 $opts fd0 fd1
  564.         $0 $opts hd sd
  565.         $0 $opts scd0 scd1
  566.         $0 $opts st0 st1
  567.         $0 $opts sg
  568.         $0 $opts pty
  569.         $0 $opts console
  570.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4  
  571.         $0 $opts ttySC0 ttySC1 ttySC2 ttySC3 
  572.         $0 $opts lp
  573.         $0 $opts par
  574.         $0 $opts audio
  575.         $0 $opts fb
  576.         $0 $opts rtc
  577.         ;;
  578.     generic-sparc)
  579.         $0 $opts std
  580.         $0 $opts fd
  581.         $0 $opts fd0 fd1
  582.         $0 $opts hd sd
  583.         $0 $opts scd0 scd1
  584.         $0 $opts st0 st1
  585.         $0 $opts sg
  586.         $0 $opts pty
  587.         $0 $opts console
  588.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
  589.         $0 $opts busmice
  590.         $0 $opts fb
  591.         $0 $opts rtc
  592.         makedev kbd  c 11 0 $cons
  593.         makedev sunmouse  c 10 6 $mouse
  594.         symlink mouse sunmouse
  595.         makedev openprom  c 10 139 root root 0664
  596.         ;;
  597.     local)
  598.         $0.local $opts
  599.         ;;
  600.     std)
  601.         makedev mem  c 1 1 $kmem
  602.         makedev kmem c 1 2 $kmem
  603.         makedev null c 1 3 $public
  604.         makedev port c 1 4 $kmem
  605.         makedev zero c 1 5 $public
  606.         symlink core $procfs/kcore
  607.         makedev full c 1 7 $public
  608.         makedev random c 1 8 $public
  609.         makedev urandom c 1 9 $public
  610.         makedev tty  c 5 0 $tty
  611.         $0 $opts ram
  612.         $0 $opts loop
  613.         ;;
  614.     hamradio)
  615.         $0 $opts scc
  616.         $0 $opts bc
  617.         ;;
  618.     scc)
  619.         for unit in 0 1 2 3 4 5 6 7 
  620.         do
  621.             makedev scc$unit c 34 $unit $system
  622.         done
  623.         ;;
  624.     mtd)    
  625.         for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  626.         do
  627.             makedev mtd$unit c 90 `math $unit \* 2` $system
  628.         done
  629.         ;;
  630.     bc)    
  631.         for unit in 0 1 2 3
  632.         do
  633.             makedev bc$unit c 51 $unit $system
  634.         done
  635.         ;;
  636.     random)
  637.         makedev random c 1 8 $public
  638.         ;;
  639.     urandom)
  640.         makedev urandom c 1 9 $readable
  641.         ;;
  642.     ram)
  643.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
  644.             makedev ram$i  b 1 $i $disk
  645.         done
  646.         symlink ram ram1
  647.         ;;
  648.     ram[0-9]|ram1[0-6])
  649.         unit=`suffix $arg ram`
  650.         makedev ram$unit b 1 $unit $disk
  651.         ;;
  652.     initrd)
  653.         makedev initrd b 1 250 $disk
  654.         ;;
  655.     raw)
  656.         makedev rawctl c 162 0 $disk
  657.         mkdir -p raw
  658.         for i in 1 2 3 4 5 6 7 8; do
  659.             makedev raw/raw$i c 162 $i $disk
  660.         done
  661.         ;;
  662.     consoleonly)
  663.         makedev tty0 c 4 0 $cons
  664.         #    new kernels need a device, old ones a symlink... sigh
  665.         kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
  666.         kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
  667.         if [ $kern_rev1 -gt 2 ]
  668.         then
  669.             makedev console c 5 1 $cons
  670.         else
  671.             if [ $kern_rev1 -eq 2 ] && [ $kern_rev2 -ge 1 ]
  672.             then
  673.                 makedev console c 5 1 $cons
  674.             else
  675.                 symlink console tty0
  676.             fi
  677.         fi
  678.         ;;
  679.     console)
  680.         $0 $opts consoleonly
  681.         major=`Major vcs 7`       # not fatal
  682.         [ "$major" ] && makedev vcs0 c $major 0 $cons
  683.         symlink vcs vcs0
  684.         [ "$major" ] && makedev vcsa0 c $major 128 $cons
  685.         symlink vcsa vcsa0
  686.         # individual vts
  687.         line=1
  688.         while [ $line -le $MAXVT ] && [ $line -le 63 ]
  689.         do
  690.             makedev tty$line c 4 $line $cons
  691.             [ "$major" ] && makedev vcs$line c $major $line $cons
  692.             [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $cons
  693.             line=`math $line + 1`
  694.         done
  695.         ;;
  696.     adb)
  697.         # pick the right arch device using dpkg's knowledge
  698.         case `dpkg --print-installation-architecture` in
  699.             powerpc)
  700.                 # ADB bus devices (char)
  701.                 makedev adb c 56 0 $mouse
  702.                 makedev adbmouse c 10 10 $mouse
  703.                 ;;
  704.             m68k)
  705.                 # ACSI disk 2, whole device (block)
  706.                 makedev adb b 28 16 $disk
  707.                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  708.                 do
  709.                     minor=$(( 16 + $part ))
  710.                     makedev adb$part b 28 $minor $disk
  711.                 done
  712.                 ;;
  713.             *)
  714.                 echo "no support for adb on this arch" >&2
  715.                 exit 1
  716.                 ;;
  717.         esac
  718.         ;;
  719.     raw1394)
  720.         makedev raw1394 c 171 0 $disk
  721.         ;;
  722.     video1394)
  723.         rm -f video1394
  724.         mkdir -p video1394
  725.         for i in `seq 0 15`
  726.         do
  727.             makedev video1394/$i c 171 `math 16 + $i` $video
  728.         done
  729.         ;;
  730.     alsa)
  731.         echo "You requested 'alsa' devices.  Please install the alsa-base package instead,"
  732.         echo "which creates and maintains device information for ALSA."
  733.         ;;
  734.     nvram)
  735.         makedev nvram c 10 144 $mouse
  736.         ;;
  737.     tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
  738.         line=`suffix $arg tty`
  739.         makedev tty$line c 4 $line $cons
  740.         ;;
  741.     ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
  742.         line=`suffix $arg ttyS`
  743.         minor=`math 64 + $line`
  744.         makedev ttyS$line c 4 $minor $dialout
  745.         ;;
  746.     ttySC[0-3])
  747.         line=`suffix $arg ttySC`
  748.         minor=`math 8 + $line`
  749.         makedev ttySC$line c 204 $minor $dialout
  750.          ;;
  751.     ttyB[0-7])
  752.         minor=`suffix $arg ttyB`
  753.         makedev ttyB$minor c 11 $minor $dialout
  754.         ;;
  755.     pty[a-ep-z])
  756.         bank=`suffix $arg pty`
  757.         base=`index pqrstuvwxyzabcde $bank`
  758.         base=`math $base \* 16`
  759.         for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
  760.         do
  761.             j=`index 0123456789abcdef $i`
  762.             makedev pty$bank$i c 2 `math $base + $j` $tty
  763.             makedev tty$bank$i c 3 `math $base + $j` $tty
  764.         done
  765.         ;;
  766.     pty)
  767.         ptysufs=""
  768.         for i in p q r s t u v w x y z a b c d e
  769.         do
  770.             ptysufs="$ptysufs pty$i"
  771.         done
  772.         $0 $opts $ptysufs ptmx
  773.         ;;
  774.     ptmx)
  775.         # master pty multiplexer for 2.1 kernels
  776.         makedev ptmx c 5 2 $tty
  777.         ;;
  778.     cyclades|ttyC)
  779.         major1=`Major ttyC 19` || continue
  780.         #major2=`Major cub 20` || continue
  781.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  782.               16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
  783.         do
  784.             makedev ttyC$i c $major1 $i $dialout
  785.             #makedev cub$i c $major2 $i $dialout
  786.         done
  787.         ;;
  788.     stallion|ttyE)
  789.         major1=`Major ttyE 24` || continue
  790.         #major2=`Major cue 25` || continue
  791.         majorc=28
  792.         minor=0
  793.         until [ $minor -gt 256 ]
  794.         do
  795.             makedev ttyE$minor c $major1 $minor $dialout
  796.             #makedev cue$minor c $major2 $minor $dialout
  797.             minor=`math $minor + 1`
  798.         done
  799.         for i in 0 1 2 3
  800.         do
  801.             makedev staliomem$i c $majorc $i $private
  802.         done
  803.         ;;
  804.     chase|ttyH)
  805.         major1=`Major ttyH 17` || continue
  806.         #major2=`Major cuh 18` || continue
  807.         minor=0
  808.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  809.         do
  810.             makedev ttyH$minor c $major1 $minor $dialout
  811.             #makedev cuh$minor c $major2 $minor $dialout
  812.             minor=`math $minor + 1`
  813.         done
  814.         ;;
  815.     rocketport|ttyR)
  816.         major1=`Major ttyR 46` || continue
  817.         #major2=`Major cur 47` || continue
  818.         minor=0
  819.         until [ $minor -gt 64 ] # tell me if 64 is wrong
  820.         do
  821.             makedev ttyR$minor c $major1 $minor $dialout
  822.             #makedev cur$minor c $major2 $minor $dialout
  823.             minor=`math $minor + 1`
  824.         done
  825.         ;;
  826.     ttyV)
  827.         major1=`Major ttyV 105` || continue
  828.         #major2=`Major cuv 106` || continue
  829.         minor=0
  830.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  831.         do
  832.             makedev ttyV$minor c $major1 $minor $dialout
  833.             #makedev cuv$minor c $major2 $minor $dialout
  834.             minor=`math $minor + 1`
  835.         done
  836.         ;;
  837.     digi|ttyD)
  838.         major1=`Major ttyD 22` || continue
  839.         #major2=`Major cud 23` || continue
  840.         minor=0
  841.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  842.         do
  843.             makedev ttyD$minor c $major1 $minor $dialout
  844.             #makedev cud$minor c $major2 $minor $dialout
  845.             minor=`math $minor + 1`
  846.         done
  847.         ;;
  848.     specialix|ttyX)
  849.         major1=`Major ttyX 32` || continue
  850.         #major2=`Major cux 33` || continue
  851.         minor=0
  852.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  853.         do
  854.             makedev ttyX$minor c $major1 $minor $dialout
  855.             #makedev cux$minor c $major2 $minor $dialout
  856.             minor=`math $minor + 1`
  857.         done
  858.         ;;
  859.     specialixIO8|ttyW)
  860.         major1=`Major ttyW 75` || continue
  861.         #major2=`Major cuw 76` || continue
  862.         minor=0
  863.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  864.         do
  865.             makedev ttyW$minor c $major1 $minor $dialout
  866.             #makedev cuw$minor c $major2 $minor $dialout
  867.             minor=`math $minor + 1`
  868.         done
  869.         ;;
  870.     PAM|ttyM)
  871.         major1=`Major ttyM 79` || continue
  872.         #major2=`Major cum 80` || continue
  873.         minor=0
  874.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  875.         do
  876.             makedev ttyM$minor c $major1 $minor $dialout
  877.             #makedev cum$minor c $major2 $minor $dialout
  878.             minor=`math $minor + 1`
  879.         done
  880.         ;;
  881.     riscom|ttyL)
  882.         major=`Major ttyL 48` || continue
  883.         minor=0
  884.         until [ $minor -gt 16 ] # tell me if 16 is wrong
  885.         do
  886.             makedev ttyL$minor c $major $minor $dialout
  887.             minor=`math $minor + 1`
  888.         done
  889.         ;;
  890.     computone|ttyF)
  891.         major=`Major ttyF 71` || continue
  892.         #major2=`Major cuf 72` || continue
  893.         minor=0
  894.         until [ $minor -gt 255 ]
  895.         do
  896.             makedev ttyF$minor c $major $minor $dialout
  897.             #makedev cuf$minor c $major2 $minor $dialout
  898.             minor=`math $minor + 1`
  899.         done
  900.         major=73
  901.         for i in 0 4 8 12
  902.         do
  903.             makedev ip2ipl$i  c $major $i $private
  904.             makedev ip2stat$i c $major `math $i + 1` $private
  905.         done
  906.         ;;
  907.     ESP|ttyP)
  908.         major=`Major ttyP 57` || continue
  909.         #major2=`Major cup 58` || continue
  910.         minor=0
  911.         until [ $minor -gt 4 ] # tell me if 4 is wrong
  912.         do
  913.             makedev ttyP$minor c $major $minor $dialout
  914.             #makedev cup$minor c $major2 $minor $dialout
  915.             minor=`math $minor + 1`
  916.         done
  917.         ;;
  918.     COMX|comx)
  919.         major=`Major comx 88` || continue
  920.         minor=0
  921.         until [ $minor -gt 4 ] # tell me if 4 is wrong
  922.         do
  923.             makedev comx$minor c $major $minor $private
  924.             minor=`math $minor + 1`
  925.         done
  926.         ;;
  927.     isdnmodem|ttyI)
  928.         major1=`Major ttyI 43` || continue
  929.         #major2=`Major cui 44` || continue
  930.         minor=0
  931.         until [ $minor -gt 63 ]
  932.         do
  933.             makedev ttyI$minor c $major1 $minor $dialout
  934.             #makedev cui$minor c $major2 $minor $dialout
  935.             minor=`math $minor + 1`
  936.         done
  937.         ;;
  938.     isdnbri)
  939.         major=45
  940.         minor=0
  941.         until [ $minor -gt 63 ]
  942.         do
  943.             makedev isdn$minor c $major $minor $dialout
  944.             makedev isdnctrl$minor c $major `math $minor + 64` $dialout
  945.             makedev ippp$minor c $major `math $minor + 128` $dialout
  946.             minor=`math $minor + 1`
  947.         done
  948.         makedev isdninfo c $major 255 $private
  949.         ;;
  950.     dcbri)
  951.         major=52
  952.         for i in 0 1 2 3
  953.         do
  954.             makedev dcbri$i c $major $i $dialout
  955.         done
  956.         ;;
  957.     capi)
  958.         major=68
  959.         makedev capi20 c $major 0 $dialout
  960.         for i in 0 1 2 3 4 5 6 7 8 9
  961.         do
  962.             makedev capi20.0$i c $major `math $i + 1` $dialout
  963.         done
  964.         for i in 10 11 12 13 14 15 16 17 18 19
  965.         do
  966.             makedev capi20.$i c $major `math $i + 1` $dialout
  967.         done
  968.         ;;
  969.     ubd)
  970.         major=98
  971.         for devicenum in 0 1 2 3 4 5 6 7
  972.         do
  973.             device=ubd`substr abcdefgh $(($devicenum + 1))`
  974.             baseminor=`math $devicenum \* 16`
  975.             makedev $device b $major $baseminor $disk
  976.             for partition in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  977.             do
  978.                 minor=`math $baseminor + $partition`
  979.                 makedev $device$partition b $major $minor $disk
  980.             done
  981.         done
  982.         ;;
  983.     fb)
  984.         for i in 0 1 2 3 4 5 6 7
  985.         do
  986.             makedev fb$i c 29 $i $video
  987.         done
  988.         ;;
  989.     fb[0-7])
  990.         dev=`suffix $arg fb`
  991.         makedev fb$dev c 29 $dev $video
  992.         ;;
  993.     netlink|tap|tap[0-9]|tap1[0-5])
  994.         makedev route     c 36 0 $coda
  995.         makedev skip      c 36 1 $coda
  996.         makedev fwmonitor c 36 3 $coda
  997.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  998.         do
  999.             makedev tap$i c 36 `math $i + 16` $coda
  1000.         done
  1001.         ;;
  1002.     tun)
  1003.         mkdir -p net
  1004.         makedev net/tun c 10 200 $system
  1005.         ;;
  1006.     lp)
  1007.         major=`Major lp 6` || continue
  1008.         makedev ${arg}0 c $major 0 $printer
  1009.         makedev ${arg}1 c $major 1 $printer
  1010.         makedev ${arg}2 c $major 2 $printer
  1011.         ;;
  1012.     par)
  1013.         major=`Major lp 6` || continue
  1014.         makedev ${arg}0 c $major 0 $printer
  1015.         makedev ${arg}1 c $major 1 $printer
  1016.         makedev ${arg}2 c $major 2 $printer
  1017.         ;;
  1018.     parport)
  1019.         major=`Major parport 99` || continue
  1020.         makedev ${arg}0 c $major 0 $printer
  1021.         makedev ${arg}1 c $major 1 $printer
  1022.         makedev ${arg}2 c $major 2 $printer
  1023.         ;;
  1024.     slm)
  1025.         major=`Major slm 28` || continue
  1026.         for i in 0 1 2 3
  1027.         do
  1028.             makedev slm c $major $i $printer
  1029.         done
  1030.         ;;
  1031.     input)
  1032.         major=`Major pcsp 13` || continue
  1033.         mkdir -p input
  1034.         for i in 0 1 2 3
  1035.         do
  1036.             makedev input/js$i c $major $i $mouse
  1037.             makedev input/mouse$i c $major `math $i + 32` $mouse
  1038.             makedev input/event$i c $major `math $i + 64` $mouse
  1039.         done
  1040.         makedev input/mice c $major 63 $mouse
  1041.         ;;
  1042.     busmice)
  1043.         major=`Major mouse 10` || continue
  1044.         makedev logibm      c $major 0 $mouse
  1045.         makedev psaux     c $major 1 $mouse
  1046.         makedev inportbm  c $major 2 $mouse
  1047.         makedev atibm     c $major 3 $mouse
  1048.         makedev jbm       c $major 4 $mouse
  1049.         ;;
  1050.     m68k-mice)
  1051.         major=`Major mouse 10` || continue
  1052.         makedev amigamouse c $major 4 $mouse
  1053.         makedev atarimouse c $major 5 $mouse
  1054.         makedev amigamouse1 c $major 7 $mouse
  1055.         makedev adbmouse  c $major 10 $mouse
  1056.         ;;
  1057.     3dfx)
  1058.         major=`Major $arg 107` || continue
  1059.         makedev $arg    c $major 0 $video
  1060.         ;;
  1061.     agpgart)
  1062.         major=`Major $arg 10` || continue
  1063.         makedev $arg    c $major 175 $video
  1064.         ;;
  1065.     hwrng)
  1066.         major=`Major $arg 10` || continue
  1067.         makedev $arg    c $major 183 $private
  1068.         ;;
  1069.     mcelog)
  1070.         major=`Major $arg 10` || continue
  1071.         makedev $arg    c $major 227 $private
  1072.         ;;
  1073.     cpu|microcode)
  1074.         mkdir -p cpu
  1075.         makedev cpu/microcode c 10 184 $private
  1076.         for i in 0 1 2 3
  1077.         do
  1078.             mkdir -p cpu/$i
  1079.             makedev cpu/$i/msr   c 202 $i $private
  1080.             makedev cpu/$i/cpuid c 203 $i $private
  1081.         done
  1082.         ;;
  1083.     ipmi|ipmikcs)
  1084.         major=`Major ipmikcs 10` || continue
  1085.         makedev ipmikcs    c $major 173 $private
  1086.         ;;
  1087.     irda)
  1088.         for i in 0 1
  1089.         do
  1090.             makedev ircomm$i c 161 $i $dialout
  1091.             makedev irlpt$i  c 161 `math $i + 16` $printer
  1092.         done
  1093.         ;;
  1094.     irnet)
  1095.         makedev irnet c 10 187 $system
  1096.         ;;
  1097.     misc)
  1098.         major=`Major mouse 10` || continue
  1099.         makedev logibm      c $major 0 $mouse
  1100.         makedev psaux     c $major 1 $mouse
  1101.         makedev inportbm  c $major 2 $mouse
  1102.         makedev atibm     c $major 3 $mouse
  1103.         makedev jbm       c $major 4 $mouse
  1104.         makedev amigamouse c $major 4 $mouse
  1105.         makedev atarimouse c $major 5 $mouse
  1106.         makedev sunmouse  c $major 6 $mouse
  1107.         makedev amigamouse1 c $major 7 $mouse
  1108.         makedev smouse    c $major 8 $mouse
  1109.         makedev pc110pad  c $major 9 $mouse
  1110.         makedev adbmouse  c $major 10 $mouse
  1111.         makedev beep      c $major 128 $mouse
  1112.         makedev modreq    c $major 129 $mouse
  1113.         makedev watchdog  c $major 130 $mouse
  1114.         makedev temperature c $major 131 $mouse
  1115.         makedev hwtrap    c $major 132 $mouse
  1116.         makedev exttrp    c $major 133 $mouse
  1117.         makedev apm_bios  c $major 134 $mouse
  1118.         makedev rtc       c $major 135 $mouse
  1119.         makedev openprom  c $major 139 root root 0664
  1120.         makedev relay8    c $major 140 $mouse
  1121.         makedev relay16   c $major 141 $mouse
  1122.         makedev msr       c $major 142 $mouse
  1123.         makedev pciconf   c $major 143 $mouse
  1124.         makedev nvram     c $major 144 $mouse
  1125.         makedev hfmodem   c $major 145 $mouse
  1126.         makedev led       c $major 151 $mouse
  1127.         makedev mergemem  c $major 153 $mouse
  1128.         makedev pmu       c $major 154 $mouse
  1129.         ;;
  1130.     fuse)
  1131.         makedev fuse      c 10 229 $system
  1132.         ;;
  1133.     pmu)
  1134.         major=`Major mouse 10` || continue
  1135.         makedev pmu       c $major 154 $mouse
  1136.         ;;
  1137.     thinkpad)
  1138.         major=`Major mouse 10` || continue
  1139.         mkdir -p thinkpad
  1140.         makedev thinkpad/thinkpad c $major 170 $mouse
  1141.         ;;
  1142.         rtc)
  1143.         major=`Major mouse 10` || continue
  1144.         makedev rtc       c $major 135 $mouse
  1145.         ;;
  1146.     efirtc)
  1147.         major=`Major mouse 10` || continue
  1148.         makedev efirtc    c $major 136 $mouse
  1149.          ;;
  1150.     mwave)
  1151.         makedev mwave     c 10 219 $mouse
  1152.         ;;
  1153.     systrace)
  1154.         makedev systrace  c 10 226 $private
  1155.         ;;
  1156.     uinput)
  1157.         mkdir -p input
  1158.         makedev input/uinput  c 10 223 $mouse
  1159.         ;;
  1160.     js)
  1161.         major=`Major Joystick 13` || continue
  1162.         for unit in 0 1 2 3
  1163.         do
  1164.             makedev js$unit c $major $unit $readable
  1165.             makedev djs$unit c $major `math $unit + 128` $readable
  1166.         done
  1167.         ;;
  1168.     fd[0-7])
  1169.         major=`Major fd 2` || continue
  1170.         base=`suffix $arg fd`
  1171.         if [ $base -ge 4 ]
  1172.         then
  1173.             base=`math $base + 124`
  1174.         fi
  1175.         makedev ${arg} b $major $base $floppy
  1176.         makedev ${arg}d360  b $major `math $base +  4` $floppy
  1177.         makedev ${arg}h1200 b $major `math $base +  8` $floppy
  1178.         makedev ${arg}u360  b $major `math $base + 12` $floppy
  1179.         makedev ${arg}u720  b $major `math $base + 16` $floppy
  1180.         makedev ${arg}h360  b $major `math $base + 20` $floppy
  1181.         makedev ${arg}h720  b $major `math $base + 24` $floppy
  1182.         makedev ${arg}u1440 b $major `math $base + 28` $floppy
  1183.         makedev ${arg}u2880 b $major `math $base + 32` $floppy
  1184.         makedev ${arg}CompaQ b $major `math $base + 36` $floppy
  1185.  
  1186.         makedev ${arg}h1440 b $major `math $base + 40` $floppy
  1187.         makedev ${arg}u1680 b $major `math $base + 44` $floppy
  1188.         makedev ${arg}h410  b $major `math $base + 48` $floppy
  1189.         makedev ${arg}u820  b $major `math $base + 52` $floppy
  1190.         makedev ${arg}h1476 b $major `math $base + 56` $floppy
  1191.         makedev ${arg}u1722 b $major `math $base + 60` $floppy
  1192.         makedev ${arg}h420  b $major `math $base + 64` $floppy
  1193.         makedev ${arg}u830  b $major `math $base + 68` $floppy
  1194.         makedev ${arg}h1494 b $major `math $base + 72` $floppy
  1195.         makedev ${arg}u1743 b $major `math $base + 76` $floppy
  1196.         makedev ${arg}h880  b $major `math $base + 80` $floppy
  1197.         makedev ${arg}u1040 b $major `math $base + 84` $floppy
  1198.         makedev ${arg}u1120 b $major `math $base + 88` $floppy
  1199.         makedev ${arg}h1600 b $major `math $base + 92` $floppy
  1200.         makedev ${arg}u1760 b $major `math $base + 96` $floppy
  1201.         makedev ${arg}u1920 b $major `math $base + 100` $floppy
  1202.         makedev ${arg}u3200 b $major `math $base + 104` $floppy
  1203.         makedev ${arg}u3520 b $major `math $base + 108` $floppy
  1204.         makedev ${arg}u3840 b $major `math $base + 112` $floppy
  1205.         makedev ${arg}u1840 b $major `math $base + 116` $floppy
  1206.         makedev ${arg}u800  b $major `math $base + 120` $floppy
  1207.         makedev ${arg}u1600 b $major `math $base + 124` $floppy
  1208.         ;;
  1209.     ed[a-b])
  1210.         major=`Major ed 36` || continue
  1211.         unit=`suffix $arg ed`
  1212.         base=`index ab $unit`
  1213.         base=`math $base \* 64`
  1214.         makedev ed$unit b $major $base $disk
  1215.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  1216.         do
  1217.             makedev ed$unit$part b $major `math $base + $part` $disk
  1218.         done
  1219.         ;;
  1220.     hd[a-b])
  1221.         major=`Major ide0` || major=`Major hd 3` || continue
  1222.         unit=`suffix $arg hd`
  1223.         base=`index ab $unit`
  1224.         base=`math $base \* 64`
  1225.         makedev hd$unit b $major $base $disk
  1226.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1227.         do
  1228.             makedev hd$unit$part b $major `math $base + $part` $disk
  1229.         done
  1230.         ;;
  1231.     hd[c-d])
  1232.         major=`Major ide1 22` || continue
  1233.         unit=`suffix $arg hd`
  1234.         base=`index cd $unit`
  1235.         base=`math $base \* 64`
  1236.         makedev hd$unit b $major $base $disk
  1237.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1238.         do
  1239.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1240.         done
  1241.         ;;
  1242.     hd[e-f])
  1243.         major=`Major ide2 33` || continue
  1244.         unit=`suffix $arg hd`
  1245.         base=`index ef $unit`
  1246.         base=`math $base \* 64`
  1247.         makedev hd$unit b $major $base $disk
  1248.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1249.         do
  1250.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1251.         done
  1252.         ;;
  1253.     hd[g-h])
  1254.         major=`Major ide3 34` || continue
  1255.         unit=`suffix $arg hd`
  1256.         base=`index gh $unit`
  1257.         base=`math $base \* 64`
  1258.         makedev hd$unit b $major $base $disk
  1259.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1260.         do
  1261.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1262.         done
  1263.         ;;
  1264.     hd[i-j])
  1265.         major=`Major ide4 56` || continue
  1266.         unit=`suffix $arg hd`
  1267.         base=`index ij $unit`
  1268.         base=`math $base \* 64`
  1269.         makedev hd$unit b $major $base $disk
  1270.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1271.         do
  1272.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1273.         done
  1274.         ;;
  1275.     hd[k-l])
  1276.         major=`Major ide5 57` || continue
  1277.         unit=`suffix $arg hd`
  1278.         base=`index kl $unit`
  1279.         base=`math $base \* 64`
  1280.         makedev hd$unit b $major $base $disk
  1281.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1282.         do
  1283.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1284.         done
  1285.         ;;
  1286.     hd[m-n])
  1287.         major=`Major ide6 88` || continue
  1288.         unit=`suffix $arg hd`
  1289.         base=`index mn $unit`
  1290.         base=`math $base \* 64`
  1291.         makedev hd$unit b $major $base $disk
  1292.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1293.         do
  1294.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1295.         done
  1296.         ;;
  1297.     hd[o-p])
  1298.         major=`Major ide7 89` || continue
  1299.         unit=`suffix $arg hd`
  1300.         base=`index op $unit`
  1301.         base=`math $base \* 64`
  1302.         makedev hd$unit b $major $base $disk
  1303.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1304.         do
  1305.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1306.         done
  1307.         ;;
  1308.     hd[q-r])
  1309.         major=`Major ide8 90` || continue
  1310.         unit=`suffix $arg hd`
  1311.         base=`index qr $unit`
  1312.         base=`math $base \* 64`
  1313.         makedev hd$unit b $major $base $disk
  1314.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1315.         do
  1316.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1317.         done
  1318.         ;;
  1319.     hd[s-t])
  1320.         major=`Major ide9 91` || continue
  1321.         unit=`suffix $arg hd`
  1322.         base=`index st $unit`
  1323.         base=`math $base \* 64`
  1324.         makedev hd$unit b $major $base $disk
  1325.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  1326.         do
  1327.             makedev hd$unit$part b $major $(( $base + $part )) $disk
  1328.         done
  1329.         ;;
  1330.     ub|uba)    
  1331.         major=180
  1332.         makedev uba b $major 0 $disk
  1333.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1334.         do
  1335.             makedev uba$part b $major $part $disk
  1336.         done
  1337.         ;;
  1338.     ht0)
  1339.         major=`Major ht0 37` || continue
  1340.         # Only one IDE tape drive is currently supported; ht0.
  1341.         makedev ht0 c $major 0 $tape
  1342.         makedev nht0 c $major 128 $tape
  1343.         ;;
  1344.     pt)
  1345.         major=`Major pt 96` || continue
  1346.         for i in 0 1 2 3
  1347.         do
  1348.             makedev pt$i c $major $i $tape
  1349.             makedev npt$i c $major `math $i + 128` $tape
  1350.         done
  1351.         ;;
  1352.     xd[a-d])
  1353.         major=`Major xd 13` || continue
  1354.         unit=`suffix $arg xd`
  1355.         base=`index abcd $unit`
  1356.         base=`math $base \* 64`
  1357.         makedev xd$unit b $major $base $disk
  1358.         for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
  1359.         do
  1360.             makedev xd$unit$part b $major $(( $base + $part )) $disk
  1361.         done
  1362.         ;;
  1363.     sd[a-z])
  1364.         major=`Major sd 8` || continue
  1365.         unit=`suffix $arg sd`
  1366.         base=`index abcdefghijklmnopqrstuvwxyz $unit`
  1367.         base=$(( $base * 16 ))
  1368.         if [ $base -lt 256 ]; then
  1369.             major=8
  1370.         else
  1371.             major=65
  1372.             base=$(( $base - 256 ))
  1373.         fi
  1374.         makedev sd$unit b $major $base $disk
  1375.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1376.         do
  1377.             minor=$(( $base + $part ))
  1378.             makedev sd$unit$part b $major $minor $disk
  1379.         done
  1380.         ;;
  1381.     sd[a-d][a-z])
  1382.         unit=`suffix $arg sd`
  1383.         unitmaj=`first $unit`
  1384.         unitmin=`second $unit`
  1385.         basemaj=`index Xabcd $unitmaj`
  1386.         basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
  1387.         basemaj=`math $basemaj \* 416`
  1388.         basemin=`math $basemin \* 16`
  1389.         base=`math $basemaj + $basemin`
  1390.         basemaj=`math $base / 256`
  1391.         base=`math $base % 256`
  1392.         major=`math basemaj \+ 64`
  1393.         if [ $major -gt 71 ]; then
  1394.             echo "$0: don't know how to make device \"$arg\"" >&2
  1395.             exit 0
  1396.         fi
  1397.         makedev sd$unit b $major $base $disk
  1398.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1399.         do
  1400.             minor=$(( $base + $part ))
  1401.             makedev sd$unit$part b $major $minor $disk
  1402.         done
  1403.                 ;;
  1404.     i2o.hd[a-z])
  1405.         [ -d i2o ] || {
  1406.             mkdir i2o
  1407.             chown root:root i2o
  1408.             chmod 755 i2o
  1409.                   [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
  1410.         }
  1411.         unit=`suffix $arg i2o.hd`
  1412.         base=`index abcdefghijklmnopqrstuvwxyz $unit`
  1413.         base=$(( $base * 16 ))
  1414.         if [ $base -lt 256 ]; then
  1415.             major=80
  1416.         else
  1417.             major=81
  1418.             base=$(( $base - 256 ))
  1419.         fi
  1420.         makedev i2o/hd$unit b $major $base $disk
  1421.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1422.         do
  1423.             minor=$(( $base + $part ))
  1424.             makedev i2o/hd$unit$part b $major $minor $disk
  1425.         done
  1426.         ;;
  1427.     i2o.hd[a-d][a-z])
  1428.         [ -d i2o ] || {
  1429.             mkdir i2o
  1430.             chown root:root i2o
  1431.             chmod 755 i2o
  1432.                   [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
  1433.         }
  1434.         unit=`suffix $arg i2o.hd`
  1435.         unitmaj=`first $unit`
  1436.         unitmin=`second $unit`
  1437.         basemaj=`index Xabcd $unitmaj`
  1438.         basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
  1439.         basemaj=`math $basemaj \* 416`
  1440.         basemin=`math $basemin \* 16`
  1441.         base=`math $basemaj + $basemin`
  1442.         basemaj=`math $base / 256`
  1443.         base=`math $base % 256`
  1444.         major=`math basemaj \+ 80`
  1445.         if [ $major -gt 87 ]; then
  1446.             echo "$0: don't know how to make device \"$arg\"" >&2
  1447.             exit 0
  1448.         fi
  1449.         makedev i2o/hd$unit b $major $base $disk
  1450.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1451.         do
  1452.             minor=$(( $base + $part ))
  1453.             makedev i2o/hd$unit$part b $major $minor $disk
  1454.         done
  1455.         ;;
  1456.     dasd[a-z])
  1457.         major=`Major dasd 94` || continue
  1458.         unit=`suffix $arg dasd`
  1459.         base=`index abcdefghijklmnopqrstuvwxyz $unit`
  1460.         base=$(( $base * 4 ))
  1461.         if [ $base -lt 256 ]; then
  1462.             major=94
  1463.         else
  1464.             major=65
  1465.             base=$(( $base - 256 ))
  1466.         fi
  1467.         makedev dasd$unit b $major $base $disk
  1468.         for part in 1 2 3
  1469.         do
  1470.             minor=$(( $base + $part ))
  1471.             makedev dasd$unit$part b $major $minor $disk
  1472.         done
  1473.         ;;
  1474.     ad[a-p])
  1475.         major=`Major ad 28` || continue
  1476.         unit=`suffix $arg ad`
  1477.         base=`index abcdefghijklmnop $unit`
  1478.         base=`math $base \* 16`
  1479.         makedev ad$unit b $major $base $disk
  1480.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1481.         do
  1482.             minor=$(( $base + $part ))
  1483.             makedev ad$unit$part b $major $minor $disk
  1484.         done
  1485.         ;;
  1486.     dac960)
  1487.         for ctr in 0 1 2 3 4 5 6 7
  1488.         do
  1489.             $0 $opts dac960.$ctr
  1490.         done
  1491.         makedev dac960_gam c 10 252 $disk
  1492.         ;;
  1493.     dac960.[0-7])
  1494.         [ -d rd ] || {
  1495.             mkdir rd
  1496.             chown root:root rd
  1497.             chmod 755 rd
  1498.         }
  1499.         unit=`suffix $arg dac960.`
  1500.             major=`math 48 + $unit`
  1501.             minor=0
  1502.             for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
  1503.                 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  1504.             do
  1505.             makedev rd/c${unit}d${ld} b $major $minor $disk
  1506.             minor=`math $minor + 1`
  1507.             for part in 1 2 3 4 5 6 7
  1508.             do
  1509.                 makedev rd/c${unit}d${ld}p$part b $major $minor $disk
  1510.                 minor=`math $minor + 1`
  1511.             done
  1512.             done
  1513.         ;;
  1514.     dpti)
  1515.         major=151
  1516.         for ld in 1 2 3 4 5 6 7
  1517.         do
  1518.            minor=`math $ld -1`
  1519.            makedev dpti${ld} c $major $minor $disk
  1520.                 done
  1521.                 ;;
  1522.     ataraid)
  1523.         for ctr in 0 1 2 # 3 4 5 6 7
  1524.         do
  1525.             $0 $opts ataraid.$ctr
  1526.         done
  1527.         ;;
  1528.     ataraid.[0-7])
  1529.         [ -d ataraid ] || {
  1530.             mkdir ataraid
  1531.             chown root:root ataraid
  1532.             chmod 755 ataraid
  1533.         }
  1534.                 unit=`suffix $arg ataraid.`
  1535.                 major=114
  1536.                 minor=`math $unit \* 16`
  1537.                 makedev ataraid/d${unit} b $major $minor $disk
  1538.                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1539.                 do
  1540.                    minor=`math $minor + 1`
  1541.                    makedev ataraid/d${unit}p$part b $major $minor $disk
  1542.                 done
  1543.          ;;
  1544.     ida)
  1545.         for ctr in 0 1 2 # 3 4 5 6 7
  1546.         do
  1547.             $0 $opts ida.$ctr
  1548.         done
  1549.         ;;
  1550.     ida.[0-7])
  1551.         [ -d ida ] || {
  1552.             mkdir ida
  1553.             chown root:root ida
  1554.             chmod 755 ida
  1555.         }
  1556.         unit=`suffix $arg ida.`
  1557.         major=`math 72 + $unit`
  1558.         minor=0
  1559.         for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1560.         do
  1561.             makedev ida/c${unit}d${ld} b $major $minor $disk
  1562.             minor=`math $minor + 1`
  1563.             for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1564.             do
  1565.             makedev ida/c${unit}d${ld}p$part b $major $minor $disk
  1566.             minor=`math $minor + 1`
  1567.             done
  1568.         done
  1569.         ;;
  1570.     cciss)
  1571.         for ctr in 0 1 2 # 3 4 5 6 7
  1572.         do
  1573.             $0 $opts cciss.$ctr
  1574.         done
  1575.         ;;
  1576.     cciss.[0-7])
  1577.         [ -d cciss ] || {
  1578.             mkdir cciss
  1579.             chown root:root cciss
  1580.             chmod 755 cciss
  1581.         }
  1582.         unit=`suffix $arg cciss.`
  1583.         major=`math 104 + $unit`
  1584.         minor=0
  1585.         for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1586.         do
  1587.             makedev cciss/c${unit}d${ld} b $major $minor $disk
  1588.             minor=`math $minor + 1`
  1589.             for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1590.             do
  1591.             makedev cciss/c${unit}d${ld}p$part b $major $minor $disk
  1592.             minor=`math $minor + 1`
  1593.             done
  1594.         done
  1595.         ;;
  1596.     rom)
  1597.         major=`Major rom 31`
  1598.         for i in 0 1 2 3 4 5 6 7
  1599.         do
  1600.             makedev rom$i    b $major $i $disk
  1601.             makedev rrom$i   b $major `math $i +8` $disk
  1602.             makedev flash$i  b $major `math $i +16` $disk
  1603.             makedev rflash$i b $major `math $i +24` $disk
  1604.         done
  1605.         ;;
  1606.     nb[0-7])
  1607.         major=`Major nbd 43` || continue
  1608.         minor=`suffix $arg nb`
  1609.         makedev nb$minor b $major $minor $disk
  1610.         ;;
  1611.     loop)
  1612.         for part in 0 1 2 3 4 5 6 7
  1613.         do
  1614.             makedev loop$part b 7 $part $disk
  1615.         done
  1616.         ;;
  1617.     loop[0-9]|loop[1-9][0-9]|loop1[0-9][0-9]|loop2[0-4][0-9]|loop25[0-5])
  1618.         minor=`suffix $arg loop`
  1619.         makedev loop$minor b 7 $minor $disk
  1620.         ;;
  1621.     md)
  1622.         major=`Major md 9` || continue
  1623.         for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  1624.             16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  1625.         do
  1626.             makedev md$part b $major $part $disk
  1627.         done
  1628.         ;;
  1629.     st[0-7])
  1630.         major=`Major st 9`
  1631.         unit=`suffix $arg st`
  1632.         makedev st${unit}   c $major $unit $tape
  1633.         makedev nst${unit}  c $major `math 128 + $unit` $tape
  1634.  
  1635.         makedev st${unit}l  c $major `math 32 + $unit` $tape
  1636.         makedev nst${unit}l c $major `math 160 + $unit` $tape
  1637.  
  1638.         makedev st${unit}m  c $major `math 64 + $unit` $tape
  1639.         makedev nst${unit}m c $major `math 192 + $unit` $tape
  1640.  
  1641.         makedev st${unit}a  c $major `math 96 + $unit` $tape
  1642.         makedev nst${unit}a c $major `math 224 + $unit` $tape
  1643.         ;;
  1644.     qic)
  1645.         major=`Major tpqic02 12`
  1646.         makedev ntpqic11   c $major   2 $tape
  1647.         makedev tpqic11    c $major   3 $tape
  1648.         makedev ntpqic24   c $major   4 $tape
  1649.         makedev tpqic24    c $major   5 $tape
  1650.         makedev ntpqic120  c $major   6 $tape
  1651.         makedev tpqic120   c $major   7 $tape
  1652.         makedev ntpqic150  c $major   8 $tape
  1653.         makedev tpqic150   c $major   9 $tape
  1654.         makedev rmt8       c $major   6 $tape
  1655.         makedev rmt16      c $major   8 $tape
  1656.         makedev tape-d     c $major 136 $tape
  1657.         makedev tape-reset c $major 255 $tape
  1658.         $0 $opts qft
  1659.         ;;
  1660.     ftape)
  1661.         major=`Major qft 27` || continue
  1662.         for unit in 0 1 2 3
  1663.         do
  1664.             makedev qft$unit     c $major $unit $tape
  1665.             makedev nqft$unit    c $major `math $unit + 4` $tape
  1666.             makedev zqft$unit    c $major `math $unit + 16` $tape
  1667.             makedev nzqft$unit   c $major `math $unit + 20` $tape
  1668.             makedev rawqft$unit  c $major `math $unit + 32` $tape
  1669.             makedev nrawqft$unit c $major `math $unit + 36` $tape
  1670.         done
  1671.         symlink ftape qft0
  1672.         symlink nftape nqft0
  1673.         ;;
  1674.     sr|scd|scd-all)
  1675.         major=`Major sr 11` || continue
  1676.         for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  1677.         do
  1678.             makedev scd$unit b $major $unit $cdrom
  1679.             symlink sr$unit scd$unit
  1680.         done
  1681.         ;;
  1682.     pktcdvd)
  1683.         major=97
  1684.         for unit in 0 1 2 3
  1685.         do
  1686.             makedev pktcdvd$unit b $major $unit $cdrom
  1687.         done
  1688.         ;;
  1689.     cfs0)
  1690.         makedev cfs0 c 67 0 $coda
  1691.         ;;
  1692.     scd[0-9]|scd[0-1][0-9])
  1693.         major=`Major sr 11` || continue
  1694.         unit=`suffix $arg scd`
  1695.         makedev scd$unit b $major $unit $cdrom
  1696.         symlink sr$unit scd$unit 
  1697.         ;;
  1698.     ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
  1699.         major=43
  1700.         unit=`suffix $arg ttyI`
  1701.         makedev ttyI$unit c $major $unit $dialout
  1702.         ;;
  1703.     ppp)
  1704.         major=108
  1705.         makedev ppp c $major 0 $dip
  1706.         ;;
  1707.     ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
  1708.         major=45
  1709.         unit=`suffix $arg ippp`
  1710.         minor=`math $unit + 128`
  1711.         makedev ippp$unit c $major $minor $dialout
  1712.         ;;
  1713.     isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
  1714.         major=45
  1715.         unit=`suffix $arg isdn`
  1716.         minor=`math $unit + 0`
  1717.         makedev isdn$unit c $major $minor $dialout
  1718.         ;;
  1719.     isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
  1720.         major=45
  1721.         unit=`suffix $arg isdnctrl`
  1722.         minor=`math $unit + 64`
  1723.         makedev isdnctrl$unit c $major $minor $dialout
  1724.         ;;
  1725.     isdninfo)
  1726.         makedev isdninfo c 45 255 $private
  1727.         ;;
  1728.     isdn-tty)
  1729.         major=43
  1730.         for unit in 0 1 2 3 4 5 6 7
  1731.         do
  1732.             makedev ttyI$unit c $major $unit $dialout
  1733.         done
  1734.         ;;
  1735.     isdn-ippp)
  1736.         major=45
  1737.         for unit in 0 1 2 3 4 5 6 7
  1738.         do
  1739.             makedev ippp$unit c $major `math $unit + 128` $dialout
  1740.         done
  1741.         ;;
  1742.     isdn-io)
  1743.         for unit in 0 1 2 3 4 5 6 7
  1744.         do
  1745.             makedev isdn$unit c 45 $unit $dialout
  1746.             makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
  1747.             makedev ippp$unit c 45 `math $unit + 128` $dialout
  1748.         done
  1749.         makedev isdninfo c 45 255 $dialout
  1750.         ;;
  1751.     sonycd)
  1752.         major=`Major sonycd 15` || continue
  1753.         makedev $arg b $major 0 $cdrom
  1754.         ;;
  1755.     mcd)
  1756.         major=`Major mcd 23` || continue
  1757.         makedev $arg b $major 0 $cdrom
  1758.         ;;
  1759.     mcdx|mcdx[0-4])
  1760.         major=`Major $arg 20` || continue
  1761.         for unit in 0 1 2 3 4
  1762.         do
  1763.             makedev mcdx$unit b $major $unit $cdrom
  1764.         done
  1765.         test -r mcdx || symlink mcdx mcdx0
  1766.         ;;
  1767.     cdu535)
  1768.         makedev $arg b 24 0 $cdrom
  1769.         ;;
  1770.     lmscd)
  1771.         makedev $arg b 24 0 $cdrom
  1772.         ;;
  1773.     sbpcd|sbpcd[123])
  1774.         major=`Major $arg 25` || continue
  1775.         base=`suffix ${arg}0 sbpcd`
  1776.         for minor in 0 1 2 3
  1777.         do
  1778.             # XXX
  1779.             unit=$(substr 0123456789abcdef $(( $base * 4 + $minor + 1 )) )
  1780.             makedev sbpcd$unit b $major $minor $cdrom
  1781.         done
  1782.         [ $arg = sbpcd ] && symlink $arg ${arg}0
  1783.         ;;
  1784.     aztcd)
  1785.         major=`Major $arg 29` || continue
  1786.         makedev ${arg}0 b $major 0 $cdrom
  1787.         ;;
  1788.     cm206cd)
  1789.         major=`Major $arg 30` || continue
  1790.         makedev ${arg}0 b $major 0 $cdrom
  1791.         ;;
  1792.     gscd)
  1793.         major=`Major $arg 16` || continue
  1794.         makedev ${arg}0 b $major 0 $cdrom
  1795.         ;;
  1796.     pcd)
  1797.         for unit in 0 1 2 3 
  1798.         do
  1799.             makedev pcd$unit b 46 $unit $cdrom
  1800.         done
  1801.         ;;
  1802.     bpcd)
  1803.         makedev $arg b 41 0 $cdrom
  1804.         ;;
  1805.     optcd)
  1806.         makedev $arg b 17 0 $cdrom
  1807.         ;;
  1808.     sjcd)
  1809.         makedev $arg b 18 0 $cdrom
  1810.         ;;
  1811.     cfs|coda)
  1812.         makedev cfs0 c 67 0 $private
  1813.         ;;
  1814.     xfs|nnpfs|arla)
  1815.         makedev xfs0 c 103 0 $private
  1816.         makedev nnpfs0 c 103 0 $private
  1817.         ;;
  1818.     logiscan)
  1819.         major=`Major logiscan` || continue
  1820.         makedev $arg c $major 0 $scanner
  1821.         ;;
  1822.     toshiba)
  1823.         major=`Major $arg 10` || continue
  1824.         makedev $arg c $major 181 root root 0666
  1825.         ;;
  1826.     m105scan)
  1827.         major=`Major m105` || continue
  1828.         makedev $arg c $major 0 $scanner
  1829.         ;;
  1830.     ac4096)
  1831.         major=`Major ac4096` || continue
  1832.         makedev $arg c $major 0 $scanner
  1833.         ;;
  1834.     audio)
  1835.         major=`Major sound 14`
  1836.         makedev mixer      c $major  0 $audio
  1837.         makedev mixer1     c $major 16 $audio
  1838.         makedev mixer2     c $major 32 $audio
  1839.         makedev mixer3     c $major 48 $audio
  1840.         makedev sequencer  c $major  1 $audio
  1841.         makedev midi00     c $major  2 $audio
  1842.         makedev midi01     c $major 18 $audio
  1843.         makedev midi02     c $major 34 $audio
  1844.         makedev midi03     c $major 50 $audio
  1845.         makedev dsp        c $major  3 $audio
  1846.         makedev dsp1       c $major 19 $audio
  1847.         makedev dsp2       c $major 35 $audio
  1848.         makedev dsp3       c $major 51 $audio
  1849.         makedev audio      c $major  4 $audio
  1850.         makedev audio1     c $major 20 $audio
  1851.         makedev audio2     c $major 36 $audio
  1852.         makedev audio3     c $major 52 $audio
  1853.         makedev sndstat    c $major  6 $audio
  1854.         makedev audioctl   c $major  7 $audio
  1855.         major=31
  1856.         makedev mpu401data c $major 0  $audio
  1857.         makedev mpu401stat c $major 1  $audio
  1858.         major=35
  1859.         for i in 0 1 2 3
  1860.         do
  1861.             makedev midi$i  c $major $i $audio
  1862.             makedev rmidi$i c $major `math $i + 64` $audio
  1863.             makedev smpte$i c $major `math $i + 128` $audio
  1864.         done
  1865.         ;;
  1866.     pcaudio)
  1867.         major=`Major pcsp 13` || continue
  1868.         makedev pcmixer c $major 0 $audio
  1869.         makedev pcsp    c $major 3 $audio
  1870.         makedev pcaudio c $major 4 $audio
  1871.         ;;
  1872.     video|video4linux|v4l|radio)
  1873.         # video4linux api includes radio, teletext, etc.
  1874.         major=`Major video 81` || continue
  1875.         minor=0
  1876.         until [ $minor -gt 63 ]
  1877.         do
  1878.             makedev video$minor c $major $minor $video
  1879.             makedev radio$minor c $major `math $minor + 64` $video
  1880.             minor=`math $minor + 1`
  1881.         done
  1882.         symlink radio radio0
  1883.         minor=0
  1884.         until [ $minor -gt 31 ]
  1885.         do
  1886.             makedev vtx$minor c $major `math $minor + 192` $video
  1887.             makedev vbi$minor c $major `math $minor + 224` $video
  1888.             minor=`math $minor + 1`
  1889.         done
  1890.         symlink video video0
  1891.         symlink vbi vbi0
  1892.         major=82
  1893.         minor=0
  1894.         until [ $minor -gt 1 ]
  1895.         do
  1896.             makedev winradio$minor c $major $minor $video
  1897.             minor=`math $minor + 1`
  1898.         done
  1899.         major=83
  1900.         makedev vtx     c $major 0 $video
  1901.         makedev vttuner c $major 16 $video
  1902.         ;;
  1903.     i2c)
  1904.         # making it possible to create an arbitrary number of i2c
  1905.         # devices might be good, but 8 should suffice for now
  1906.         major=`Major i2c 89` || continue
  1907.         minor=0
  1908.         until [ $minor -gt 7 ] 
  1909.         do
  1910.             makedev i2c-$minor c $major $minor $private
  1911.             minor=`math $minor + 1`
  1912.         done
  1913.         ;;
  1914.     tlk)
  1915.         major=102
  1916.         minor=0
  1917.         until [ $minor -gt 3 ] # tell me if 3 is wrong...
  1918.         do
  1919.             makedev tlk$minor c $major $minor $video
  1920.             minor=`math $minor + 1`
  1921.         done
  1922.         ;;
  1923.     srnd)
  1924.         makedev srnd0 c 110 0 $video
  1925.         makedev srnd1 c 110 1 $video
  1926.         ;;
  1927.     fgrab)
  1928.         makedev mmetfgrab c 40 0 $video
  1929.         makedev wvisfgrab c 26 0 $video
  1930.         for i in 0 1 # more?
  1931.         do
  1932.             makedev iscc$i    c 93 $i $video
  1933.             makedev isccctl$i c 93 `math $i + 128` $video
  1934.         done
  1935.         for i in 0 1 # more?
  1936.         do
  1937.             makedev dcxx$i c 94 $i $video
  1938.         done
  1939.         ;;
  1940.     sg|sg-all)
  1941.         major=`Major sg 21`
  1942.         for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  1943.         do
  1944.             makedev sg$unit c $major $unit $scsi
  1945.         done
  1946.         ;;
  1947.     pg)
  1948.         major=`Major pg 97`
  1949.         for unit in 0 1 2 3
  1950.         do
  1951.             makedev pg$unit c $major $unit $scsi
  1952.         done
  1953.         ;;
  1954.     fd)
  1955.         # not really devices, we use the /proc filesystem
  1956.         symlink fd     $procfs/self/fd
  1957.         symlink stdin  fd/0
  1958.         symlink stdout fd/1
  1959.         symlink stderr fd/2
  1960.         ;;
  1961.     ibcs2)
  1962.         major=`Major ibcs2 30` || continue
  1963.         makedev socksys c $major 0 $ibcs2
  1964.         symlink nfsd socksys
  1965.         makedev spx     c $major 1 $ibcs2
  1966.         symlink X0R null
  1967.         ;;
  1968.     netlink)
  1969.         major=36
  1970.         makedev route c $major 0 $private
  1971.         makedev skip  c $major 1 $private
  1972.         ;;
  1973.     enskip)
  1974.         major=64
  1975.         makedev enskip c $major 0 $private
  1976.         ;;
  1977.     ipfilt*)
  1978.         major=95
  1979.         makedev ipl     c $major 0 $private
  1980.         makedev ipnat   c $major 1 $private
  1981.         makedev ipstate c $major 2 $private
  1982.         makedev ipauth  c $major 3 $private
  1983.         ;;
  1984.     qng)
  1985.         makedev qng c 77 0 $private
  1986.         ;;
  1987.     apm)
  1988.         major=`Major mouse 10` || continue
  1989.         makedev apm_bios  c $major 134 $mouse
  1990.         ;;
  1991.     dcf)
  1992.         major=`Major dcf` || continue
  1993.         makedev $arg c $major 0 $system
  1994.         ;;
  1995.     helloworld)
  1996.         major=`Major hw` || continue
  1997.         makedev helloworld c $major 0 $public
  1998.         ;;
  1999.     ipsec)
  2000.         # For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
  2001.         # implementation of IPSEC
  2002.         makedev ipsec c 36 10 $ipsec
  2003.         ;;
  2004.     comedi)
  2005.         major=98
  2006.         for minor in 0 1 2 3
  2007.         do
  2008.             makedev comedi$minor c $major $minor $public
  2009.         done
  2010.         ;;
  2011.     tilp)
  2012.         for i in `seq 0 7`
  2013.         do
  2014.             makedev tipar$i c 115 $i $printer
  2015.             makedev tiser$i c 115 `math 8 + $i` $dialout
  2016.         done
  2017.         for i in `seq 0 31`
  2018.         do
  2019.             makedev tiusb$i c 115 `math 16 + $i` $dialout
  2020.         done
  2021.         ;;
  2022.     dvb)
  2023.         # check if kernel-version is >= 2.6.8, if yes, create dvb-devices with
  2024.         # major-number 212, in the other case 250
  2025.         
  2026.         kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
  2027.         kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
  2028.         kern_rev3=`uname -r | sed -e 's@^[^.]*\.[^.]*\.\([^.][0-9]*\).*@\1@'`
  2029.       
  2030.         dvb_major=250
  2031.  
  2032.         if [ $kern_rev1 -gt 2 ] || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -gt 6 ]) \
  2033.             || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -eq 6 ] && [ $kern_rev3 -ge 8 ])
  2034.         then 
  2035.             dvb_major=212 
  2036.         fi
  2037.  
  2038.         mkdir -p dvb
  2039.         for i in 0 1 2 3
  2040.         do
  2041.             mkdir -p dvb/adapter$i
  2042.             makedev dvb/adapter$i/video0    c $dvb_major `math 64 \* $i + 0` $video
  2043.             makedev dvb/adapter$i/audio0    c $dvb_major `math 64 \* $i + 1` $video
  2044.             makedev dvb/adapter$i/frontend0 c $dvb_major `math 64 \* $i + 3` $video
  2045.             makedev dvb/adapter$i/demux0    c $dvb_major `math 64 \* $i + 4` $video
  2046.             makedev dvb/adapter$i/dvr0      c $dvb_major `math 64 \* $i + 5` $video
  2047.             makedev dvb/adapter$i/ca0       c $dvb_major `math 64 \* $i + 6` $video
  2048.             makedev dvb/adapter$i/net0      c $dvb_major `math 64 \* $i + 7` $video
  2049.             makedev dvb/adapter$i/osd0      c $dvb_major `math 64 \* $i + 8` $video
  2050.         done
  2051.         ;;
  2052.     usb)
  2053.         mkdir -p usb
  2054.         major=180
  2055.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  2056.         do
  2057.             makedev usb/lp$i c $major $i $printer
  2058.             makedev usb/mouse$i c $major `math $i + 16` $mouse
  2059.             makedev usb/ez$i c $major `math $i + 32` $system
  2060.             makedev usb/scanner$i c $major `math $i + 48` $scanner
  2061.             makedev usb/hiddev$i c $major `math $i + 96` $system
  2062.             makedev ttyACM$i c 166 $i $dialout
  2063.             makedev ttyUSB$i c 188 $i $dialout
  2064.         done
  2065.         makedev usb/rio500 c $major 64 $audio
  2066.         makedev usb/usblcd c $major 65 $audio
  2067.         makedev usb/cpad0 c $major 66 $audio
  2068.         ;;
  2069.     bluetooth)
  2070.         major=216
  2071.         for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
  2072.             16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  2073.         do
  2074.             makedev rfcomm$i c $major $i $dialout
  2075.         done
  2076.         makedev vhci c 10 250 $dialout
  2077.         for i in 0 1 2 3; do
  2078.             makedev ttyUB$i c 216 $i $dialout
  2079.             makedev ccub$i c 217 $i $dialout
  2080.         done
  2081.         ;;
  2082.     paride)
  2083.                 major=45
  2084.                 for unit in a b c d
  2085.         do
  2086.                     base=`index abcd $unit`
  2087.                     base=`math $base \* 16`
  2088.                     makedev pd$unit b $major $base $disk
  2089.                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  2090.                     do
  2091.             makedev pd$unit$part b $major $(( $base + $part )) $disk
  2092.                     done
  2093.         done
  2094.         for i in 0 1 2 3
  2095.         do
  2096.             makedev pcd$i b 46 $i $cdrom
  2097.             makedev pf$i  b 47 $i $floppy
  2098.         done
  2099.                 ;;
  2100.     update)
  2101.         devices=
  2102.         if [ ! -f $procfs/devices ]
  2103.         then
  2104.             echo "$0: warning: can't read $procfs/devices" >&2
  2105.         else
  2106.             exec 3<$procfs/devices
  2107.             while read major device extra <&3
  2108.             do
  2109.                 device=`echo $device | sed 's#/.*##'`
  2110.                 case "$major" in
  2111.                     Character|Block|'')
  2112.                         ;;
  2113.                     *)
  2114.                         eval "major_$device=$major"
  2115.                         devices="$devices $device"
  2116.                         ;;
  2117.                 esac
  2118.             done
  2119.             exec 3<&-
  2120.         fi
  2121.  
  2122.         if [ ! "$devices" ]
  2123.         then
  2124.             echo "$0: don't appear to have any devices" >&2
  2125.             continue
  2126.         fi
  2127.         if [ "$opt_d" ]
  2128.         then
  2129.             echo "$0: can't delete an update" >&2
  2130.             continue
  2131.         fi
  2132.         create=
  2133.         delete=
  2134.         devs="$devices"
  2135.         if [ -f DEVICES ]
  2136.         then
  2137.             exec 3<DEVICES
  2138.             while read device major <&3
  2139.             do
  2140.                 eval now=\$major_$device
  2141.                 if [ "$now" = "" ]
  2142.                 then
  2143.                     delete="$delete `cvt $device`"
  2144.                     continue
  2145.                 elif [ "$now" != $major ]
  2146.                 then
  2147.                     create="$create "`cvt $device`
  2148.                 fi
  2149.                 devs=`strip " $devs " $device`
  2150.             done
  2151.             exec 3<&-
  2152.         fi
  2153.         create="$create "`cvt $devs`
  2154.         [ "$delete" != "" ] && $0 $opts -d $delete
  2155.         [ "$create" != " " ] && $0 $opts $create
  2156.         [ "$opt_n" ] && continue
  2157.         for device in $devices
  2158.         do
  2159.             if [ "`cvt $device`" ]
  2160.             then
  2161.                 eval echo $device \$major_$device
  2162.             fi
  2163.         done > DEVICES
  2164.         ;;
  2165.     *)
  2166.         echo "$0: don't know how to make device \"$arg\"" >&2
  2167.         exit 1
  2168.         ;;
  2169.     esac
  2170. done
  2171.  
  2172. exit 0
  2173.